package queue

import (
	"time"
	"yunj/app/dto"
	"yunj/app/service/client/logdbservice"
	"yunj/pkg/global"
	"yunj/pkg/yunj/core/enum/queueenum"
	"yunj/pkg/yunj/core/queue"
	"yunj/pkg/yunj/util"
)

// 实现QueueInterface接口
type clientLog struct {
	queue.Queue
}

var ClientLog = func() *clientLog {
	queue := &clientLog{}
	queue.Queue.InitQueueInstance(queue)
	return queue
}()

// 队列名称
func (q *clientLog) Name() string {
	return "client.log"
}

// 队列描述
func (q *clientLog) Desc() string {
	return "客户端日志"
}

// 定义默认的处理状态（没有配置数据库状态时应用）
func (q *clientLog) DefaultHandleStatus() uint8 {
	return queueenum.STATUS_RUNNING
}

// 消息消费处理超时时间
func (q *clientLog) Timeout() time.Duration {
	return 10 * time.Second
}

// 开启的协程数量
func (q *clientLog) CoroutineNum() int {
	return 2
}

// 消息消费处理函数
func (q *clientLog) Handler(messages []string) {
	logPrefix := q.LogPrefix()
	for _, message := range messages {
		param, err := util.JsonTo[*dto.ClientLogRecordParam](message)
		if err != nil {
			global.Logger.WithField("message", message).Error(util.FormatError(err, logPrefix+"消息参数错误！"))
			continue
		}
		err = logdbservice.Save(param)
		if err != nil {
			global.Logger.WithField("message", message).Error(util.FormatError(err, logPrefix+"消息数据库保存异常！"))
			continue
		}
	}
}
